Many of us have seen films containing remarkably realistic dinosaurs, aliens, animated toys and other fanciful creatures. Such animations are made possible by computer graphics. Using such techniques, a computer graphics artist can specify how each object should look and how it should change in appearance over time, and a computer then models the objects and displays them on a display such as your television or a computer screen. The computer takes care of performing the many tasks required to make sure that each part of the displayed image is colored and shaped just right based on the position and orientation of each object in a scene, the direction in which light seems to strike each object, the surface texture of each object, and other factors.
Because computer graphics generation is complex, computer-generated three-dimensional graphics just a few years ago were mostly limited to expensive specialized flight simulators, high-end graphics workstations and supercomputers. The public saw some of the images generated by these computer systems in movies and expensive television advertisements, but most of us couldn't actually interact with the computers doing the graphics generation. All this has changed with the availability of relatively inexpensive 3D graphics platforms such as, for example, the Nintendo 64® and various 3D graphics cards now available for personal computers. It is now possible to interact with exciting 3D animations and simulations on relatively inexpensive computer graphics systems in your home or office.
One problem that graphics system designers have often confronted in the past was the efficient rendering of a 3D object that displays realistic-looking surface characteristics that react to various lighting conditions in a manner similar to the surface of an actual object having, for example, random surface flaws, irregularities, roughness, bumps or other slight non-planar surface variations. While in some instances such minute surface characteristics might be actually modeled, the time required for translating and rendering a 3D object with such a complex surface would be prohibitive for most real-time or interactive gaming applications. Consequently, various solutions to this problem were offered. For example, a technique generally known as “bump-mapping” was developed which allowed one to approximate the effect that non-planar surface variations would produce on lighted object. See, for example, J. F. Blinn “Simulation of Wrinkled Surfaces” Computer Graphics, (SIGRAPH '78 Proceedings), vol. 12, No. 3, pp. 286–292 (August 1978); “Models of Light Reflection for Computer Synthesized Pictures”, Proc. 4th Conference on Computer Graphics and Instructive Techniques, 1977; and “Programming with OpenGL: Advanced Rendering” by Tom McReynolds and David Blythe—SIGGRAPH '97 course—Section 8.3 “Bump Mapping with Textures”. Basically, this technique allows a graphics application programmer to add realism to an image without using a lot of geometry by modeling small surface variations as height differences and then applying those difference values over a surface as perturbations to a surface Normal vector used in computing surface lighting effects. Effectively, a bump-map modifies the shading of a polygon by perturbing the surface Normal on a per-pixel basis. The shading makes the surface appear bumpy, even though the underlying geometry is relatively flat.
Most conventional approaches toward implementing simple forms of bump-mapping effects with diffuse-lit textured surfaces generally entail computing, for each pixel, the difference between a first sample of a bump map texture image at a particular texture coordinate and a second sample of the same texture image at a texture coordinate displacement. In addition, computing a texture coordinate displacement map generally involves computations using eye-space components of surface Tangent and Binormal vectors (binormals). In particular, to implement a simple form of bump-mapping having an embossing type effect on a texture image, it is most efficient to compute and apply the texture coordinate displacements in the eye-space (view-space/camera-space) reference frame—which is more conducive to a subsequent rasterizing process prior rendering for display. Consequently, texture coordinate displacement for emboss-style bump-mapping is preferably computed and generated after vertex position and surface binormals at a vertex are transformed from model-space into eye-space for pixel rendering.
Typically, in low cost graphics processing systems such as a home video game system, vertex transformation and lighting (T&L) operations are commonly performed by the application program using the graphics system host CPU—primarily because a software T&L implementation, although more computationally taxing on the host CPU, is usually less expensive than using specialized hardware. Hardware implementation of T&L, however, may be preferable in gaming systems because it typically results in much faster renderings and can free up host CPU processing time for performing other desirable tasks such as game strategy and AI computations for improved game performance. Moreover, in graphics rendering arrangements where T&L operations are performed by the application software on the host CPU, additional processing tasks such as performing texture coordinate computations for bump-mapping can significantly add to the processing overhead.
In graphics rendering systems where the T&L operations are performed by dedicated graphics hardware, the host CPU typically provides model-space vertex attributes to the dedicated T&L hardware and then allows the hardware to perform all the coordinate space transformations and lighting computations. Consequently, it is not particularly efficient to require the host CPU to compute texture coordinate displacements for bump mapping purposes subsequent to the T&L hardware performing space transformations of the vertex position and surface normal/binormal vectors. Essentially, this would effectively undermine rendering speed improvements gained from utilizing dedicated T&L hardware whenever bump mapping operations are performed.
The present invention solves this problem by providing techniques and arrangements in a graphics rendering system for the efficient generation of texture coordinate displacements for implementing at least an emboss-style bump-mapping texture effect without the need for the host CPU application software to compute the required texture coordinate displacements. An enhanced API (applications program interface) vertex attribute function capable of specifying three surface normals per vertex (i.e., the Normal, Tangent and Binormal) is utilized and the host CPU application software need only compute the required additional Tangent and Binormal surface vectors per vertex in object-space (model-space), in addition to providing the surface Normal and other conventional per-vertex attributes.
Some of the features provided by aspects of this invention include:                use of a texture-combining unit capable of performing texture subtraction in one pass,        use of texture combining for bump mapping that performs texture combining in texture hardware,        scaling of the binormals (Tangent and Binormal) by scaling a model view matrix and applying the model view matrix to the binormals,        computation of texture displacements using the Binormal and Tangent vectors but not the Normal input vector,        increased performance through use of two distinct dot product computation units (one dot unit performs model view matrix multiply, the second computes in parallel the dot products of the Tangent and Binormal with the light direction vector as well as the square of the light direction vector),        fully pipelined hardware can perform the necessary computations using a small number of distinct operations.        
In accordance with one aspect of the present invention, a graphics rendering system is provided with enhanced vertex transformation and lighting (T&L) hardware that is capable of performing at least simple emboss-style bump-mapping in addition to the conventional T&L operations. This style of bump-mapping is useful when the surface geometry of an object is being animated. The vector geometry processing portion of the T&L hardware is enhanced to accommodate processing a transformation of object-space vertex surface binormals (i.e., the Tangent and Binormal vectors) to eye-space and the computation of a texture coordinate displacement based on light direction (light-to-vertex) vector dot products with the transformed binormals.
In accordance with another aspect of the present invention, an enhanced vertex attribute description API function provides three vertex surface normals (N, B and T) to the T&L vector geometry processing hardware along with vertex position and light source position. The geometry processing hardware then transforms the surface normals to eye-space, computes the light vector in eye-space and uses the vector components to compute the appropriate texture coordinate displacements for use in producing an emboss-style bump mapped texture effect.